package com.uncp.comisiondeadmision.controlador;

import java.io.Serializable;
import java.util.Date;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import com.uncp.comisiondeadmision.service.ApplicationBusinessDelegate;
import com.uncp.comisiondeadmision.service.ISCdp;
import com.uncp.comisiondeadmision.service.ISPostulante;
import com.uncp.comisiondeadmision.service.ISSolicitud;
import com.uncp.comisiondeadmision.service.ISUsuarioSistema;
import com.uncp.comisiondeadmision.util.entity.ECdp;
import com.uncp.comisiondeadmision.util.entity.EPostulante;
import com.uncp.comisiondeadmision.util.entity.ESolicitud;
import com.uncp.comisiondeadmision.util.entity.EUsuariosistema;
import com.uncp.comisiondeadmision.utils.Util;

@ManagedBean(name="cUsuarioSistemaController")
@SessionScoped
public class CUsuarioSistemaController implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private static ApplicationBusinessDelegate abd = new ApplicationBusinessDelegate();

	private static ISUsuarioSistema sUsuarioSistema = abd.getISUsuarioSistema();

	private static ISCdp sCdp = abd.getIsCdp();

	
	private static ISSolicitud solicitudService = abd.getISSolicitud();
	/**
	 * Define la informacion respecto al Usuario de Sistema en Sesion
	 */
	private EUsuariosistema eUsuarioSistema;

	private String str_codcdp;

	private EPostulante ePostulante;

	/**
	 * Atributos necesarios para la session del postulante , la momento
	 * de ingresar su CDP
	 * */
	private Integer codPostulante;
	private String nombre;
	private String apePar;
	private String apeMat;
	private String dni;
	private Integer codSolicitud;
	
	/**
	 * Alias para la navegacion a la pagina de generacion CDP
	 */
	private static String GENERACIONCDP = "generacionCDP";

	private static String POSTULANTE = "postulanteOK";

	private static String GENERACIONCARNET = "generacionCarnet";

	public CUsuarioSistemaController() {
		eUsuarioSistema = new EUsuariosistema();
	}

	public String validaIngreso() {

		EUsuariosistema eUsuariosistema = new EUsuariosistema();

		eUsuariosistema = sUsuarioSistema.validarUsuario(eUsuarioSistema);
		if (eUsuariosistema != null) {
			this.eUsuarioSistema = eUsuariosistema;

			if (eUsuarioSistema.getStr_tipousuario().equalsIgnoreCase(
					"Tesorero")) {

				HttpSession Session = (HttpSession) FacesContext
						.getCurrentInstance().getExternalContext()
						.getSession(true);
				Session.setAttribute("USUARIO_LOGEADO", eUsuariosistema);

				return GENERACIONCDP;

			} else if (eUsuarioSistema.getStr_tipousuario().equalsIgnoreCase(
					"ECA-CARNET")) {

				HttpSession Session = (HttpSession) FacesContext
						.getCurrentInstance().getExternalContext()
						.getSession(true);
				Session.setAttribute("USUARIO_LOGEADO", eUsuariosistema);

				System.out.println("USUARIO INGRESADO : "
						+ eUsuariosistema.getStr_tipousuario());

				return GENERACIONCARNET;

			}else if (eUsuarioSistema.getStr_tipousuario().equalsIgnoreCase(
					"ECA-INSCRIPCION")) {

				
				HttpSession Session = (HttpSession) FacesContext
						.getCurrentInstance().getExternalContext()
						.getSession(true);
				Session.setAttribute("USUARIO_LOGEADO", eUsuariosistema);

				System.out.println("USUARIO INGRESADO : "
						+ eUsuariosistema.getStr_tipousuario());

				return "evaluacionRequisitos.xhtml";

			}

			System.out.println(eUsuarioSistema.getInt_codusuario() + "------");

		} else {
			eUsuarioSistema = new EUsuariosistema();
		}

		return null;

	}

	public String loginForCdp() {
		
		System.out.println(str_codcdp);
		ECdp ECdp = null;
		try {
			ECdp = sCdp.buscarXPk(str_codcdp);

			if (ECdp != null) {
				setNombre(ECdp.getPostulante().getStr_nom_postu());
				setApePar(ECdp.getPostulante().getStr_apePat_postu());
				setApeMat(ECdp.getPostulante().getStr_apeMat_postu());
				setDni(ECdp.getPostulante().getStr_dni_postu());
				setCodPostulante(ECdp.getPostulante().getInt_cod_postu());

				ESolicitud eSolicitud = solicitudService
				.listarSoliciXPostu(getCodPostulante());

				if (eSolicitud==null){

				EPostulante ePostulante = new EPostulante();
				ePostulante.setInt_cod_postu(getCodPostulante());
				
				ESolicitud solicitud = new ESolicitud();
				solicitud.setStr_fecha(Util.convertirFechaCadena(new Date(), "yyyy/MM/dd"));
				solicitud.setStr_estado("pendiente");
				solicitud.setPostulante(ePostulante);
				
				solicitudService.insertarSolicitud(solicitud); 
				
				setCodSolicitud(solicitud.getInt_nrosolicitud());
				}else {
					setCodSolicitud(eSolicitud.getInt_nrosolicitud());
				}
				
				System.out.println("Cod Solcitud :" + getCodSolicitud());
			
				return "registrarRequisitosPostu.xhtml";
			}

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		
		return null;
		/*EPostulante ePostulante = new EPostulante();

		try {
			ePostulante = sCdp.buscarXPk(str_codcdp).getPostulante();

			if (ePostulante != null) {
				this.ePostulante = ePostulante;

				HttpSession Session = (HttpSession) FacesContext
						.getCurrentInstance().getExternalContext()
						.getSession(true);
				Session.setAttribute("POSTULANTE_LOGEADO", ePostulante);
				return POSTULANTE;

			}

			else {
				ePostulante = new EPostulante();
			}
		} catch (Exception e) {

			e.printStackTrace();
		}
		return null;*/

	}
	
    public String cerrarCession() {
		System.out.println("cerrar Cession");
		FacesContext.getCurrentInstance().getExternalContext()
				.invalidateSession();

		return "index.xhtml?faces-redirect=true";
	}

	public EUsuariosistema geteUsuarioSistema() {
		return eUsuarioSistema;
	}

	public void seteUsuarioSistema(EUsuariosistema eUsuarioSistema) {
		this.eUsuarioSistema = eUsuarioSistema;
	}

	public EPostulante getePostulante() {
		return ePostulante;
	}

	public void setePostulante(EPostulante ePostulante) {
		this.ePostulante = ePostulante;
	}

	public String getStr_codcdp() {
		return str_codcdp;
	}

	public void setStr_codcdp(String str_codcdp) {
		this.str_codcdp = str_codcdp;
	}


	public Integer getCodPostulante() {
		return codPostulante;
	}

	public void setCodPostulante(Integer codPostulante) {
		this.codPostulante = codPostulante;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApePar() {
		return apePar;
	}

	public void setApePar(String apePar) {
		this.apePar = apePar;
	}

	public String getApeMat() {
		return apeMat;
	}

	public void setApeMat(String apeMat) {
		this.apeMat = apeMat;
	}

	public String getDni() {
		return dni;
	}

	public void setDni(String dni) {
		this.dni = dni;
	}

	public Integer getCodSolicitud() {
		return codSolicitud;
	}

	public void setCodSolicitud(Integer codSolicitud) {
		this.codSolicitud = codSolicitud;
	}
	
	
}
